package com.zzl.jedis;

import redis.clients.jedis.Jedis;

import java.util.Random;
import java.util.Set;

/*
* 模拟手机验证码
*1、输入手机号，点击发送后随机生成6位数字码，2分钟有效
*2、输入验证码，点击验证，返回成功或失败
*3、每个手机号每天只能输入3次
 */
public class demo2 {
    public static void main(String[] args) {
        //创建连接
        Jedis jedis = new Jedis("localhost",6379);
//        jedis.auth("123456");
        // 清空redis中当前所有数据
//        jedis.flushDB();
        // 调用手机发送次数，查看redis中是否有对应的key
        verifyCode("15016580799");
        Set<String> keys = jedis.keys("*");
        for (String key:keys){
            System.out.println(key);
        }
        String count = jedis.get("verifyCode15016580799:count");
        System.out.println(count);
        jedis.close();

        // 验证手机和验证码是否正确
        getRedisCode("15016580799", "256244");

    }

    /*  生成六位随机验证码*/
    public static String getCode(){
        Random random =new Random();
        String code = "";
        for(int i=0;i<6;i++){
            int rand = random.nextInt(10);
            code+=rand;
        }
        return code;
    }

    //2、每个手机每天只能发送3次，并且验证存入redis，设置过期时间
    public static void verifyCode(String phone){
        //创建连接
        Jedis jedis = new Jedis("localhost",6379);
//        jedis.auth("123456");
        //拼写key的规则
        //手机发送次数key
        String countKey = "verifyCode"+phone+":count";

        // 手机每天只能发送三次
        String count = jedis.get(countKey);
        if (null == count){
            //没有发送第一次发送, 发送次数是1
            jedis.setex(countKey,24*60*60,"1");
        }else if (Integer.parseInt(count)<=2){
            // 自增1,redis会转换成整型，再进行操作，默认为0。返回自增操作后的值
            jedis.incr(countKey);
        }else {
            System.out.println("今天发送已经超过三次不能发送");
            jedis.close();
            return;
        }

        // 发送验证码放到redis中

        // 验证码key
        String codeKey = "verifyCode"+phone+":code";
        String vCode = jedis.get(codeKey);
        if(null == vCode){
            vCode = getCode();
            jedis.setex(codeKey, 120, vCode);
        }
        System.out.println("code:"+vCode);
        jedis.close();
    }

    //3、验证码的校验
    public static void getRedisCode(String phone, String code){
        //创建连接
        Jedis jedis = new Jedis("localhost",6379);
//        jedis.auth("123456");

        // 验证码key
        String codeKey = "verifyCode"+phone+":code";
        String redisCode = jedis.get(codeKey);
        if (code.equals(redisCode)){
            System.out.println("成功");
        }else {
            System.out.println("失败");
        }
        jedis.close();
    }
}
